স্ট্যান্ডার্ড ইনপুট/আউটপুট বাফারিং

Computer Programming - সি স্ট্যান্ডার্ড লাইব্রেরি রেফারেন্স (C Standard Library Reference) Input/Output Buffering এবং Formatting (ইনপুট/আউটপুট বাফারিং এবং ফরম্যাটিং) |
181
181

স্ট্যান্ডার্ড ইনপুট/আউটপুট বাফারিং

স্ট্যান্ডার্ড ইনপুট/আউটপুট বাফারিং হলো এমন একটি প্রক্রিয়া যা ডেটা আদান-প্রদান (ইনপুট/আউটপুট) দ্রুত করার জন্য ব্যবহৃত হয়। বাফারিংয়ের মাধ্যমে ইনপুট/আউটপুট অপারেশনগুলোকে মেমোরিতে সাময়িকভাবে ধরে রাখা হয়, যাতে একবারে বৃহৎ পরিমাণ ডেটা পাঠানো বা গ্রহণ করা যায় এবং এতে প্রোগ্রামের পারফরম্যান্স উন্নত হয়।

সি প্রোগ্রামিং ভাষায় বাফারিং সাধারণত তিনভাবে কাজ করে:

  1. লাইনে বাফারিং (Line Buffering): প্রতি লাইনে ডেটা সংরক্ষণ করা হয় এবং প্রতিটি newline (নতুন লাইন) এলে ডেটা আউটপুট হয় বা পাঠানো হয়।
  2. পূর্ণ বাফারিং (Full Buffering): বাফার পূর্ণ না হওয়া পর্যন্ত ডেটা সংরক্ষণ করা হয় এবং বাফার পূর্ণ হলে ডেটা পাঠানো হয়।
  3. অবাফারিং (Unbuffered): কোনো বাফারিং হয় না, ডেটা ইনপুট বা আউটপুট সাথে সাথেই পাঠানো হয়।

বাফারিংয়ের প্রয়োজনীয়তা

  • পারফরম্যান্স উন্নত করা: বার বার ইনপুট বা আউটপুট অপারেশন করতে হলে বাফারিং অপারেশনের সংখ্যা কমিয়ে আনার মাধ্যমে পারফরম্যান্স উন্নত করা যায়।
  • CPU এবং I/O সিঙ্ক্রোনাইজেশন: ইনপুট বা আউটপুট ডিভাইসগুলো অপেক্ষাকৃত ধীরগতির হয়, তাই বাফারিংয়ের মাধ্যমে সিপিইউ তার কাজ চালিয়ে যেতে পারে এবং ইনপুট/আউটপুট ডিভাইসের সাথে সিঙ্ক্রোনাইজড থাকে।
  • ডেটা সঞ্চয় করা: ডেটা একত্রে সঞ্চিত করে একবারে পাঠানোর মাধ্যমে অপারেশনগুলোর সংখ্যা কমানো যায়, যা প্রোগ্রামের কার্যক্ষমতা বাড়ায়।

ইনপুট/আউটপুট বাফারিংয়ের প্রকারভেদ

১. লাইনে বাফারিং (Line Buffering)

লাইনে বাফারিংয়ে ডেটা newline (নতুন লাইন) ক্যারেক্টার ('\n') আসা পর্যন্ত বাফারে ধরে রাখা হয় এবং newline এলে ডেটা পাঠানো হয় বা আউটপুটে প্রদর্শিত হয়। সাধারণত, স্ট্যান্ডার্ড ইনপুট (stdin) এবং স্ট্যান্ডার্ড আউটপুট (stdout) লাইনে বাফারিং অনুসরণ করে।

উদাহরণ: নিচের উদাহরণে printf() ফাংশন ব্যবহার করে আউটপুট প্রদর্শন করা হয়েছে, যা লাইনে বাফারিংয়ের মাধ্যমে কাজ করে।

#include <stdio.h>

int main() {
    printf("Hello, World!\n");  // newline আসলে আউটপুট পাঠানো হবে
    return 0;
}

২. পূর্ণ বাফারিং (Full Buffering)

পূর্ণ বাফারিংয়ে ডেটা বাফারে জমা থাকে যতক্ষণ না বাফার পূর্ণ হয়। বাফার পূর্ণ হলে, এটি একবারে আউটপুট ডিভাইসে পাঠানো হয়। fopen() ফাংশন ব্যবহার করে ফাইল খোলার সময় পূর্ণ বাফারিং অনুসরণ করা হয়।

উদাহরণ: নিচের উদাহরণে ফাইলে লেখা পূর্ণ বাফারিং অনুসরণ করে, যা ফাইল ক্লোজ করলে বা বাফার পূর্ণ হলে ডেটা ফাইলে লেখা হয়।

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "w");
    if (file == NULL) {
        printf("Error opening file.\n");
        return 1;
    }

    fprintf(file, "Hello, World!\n");  // পূর্ণ বাফারিং অনুসরণ করে
    fclose(file);  // ফাইল বন্ধ করলে ডেটা ফাইলে পাঠানো হবে
    return 0;
}

৩. অবাফারিং (Unbuffered)

অবাফারিংয়ে কোনো বাফার ব্যবহৃত হয় না, অর্থাৎ প্রতিটি ইনপুট বা আউটপুট অপারেশন সাথে সাথেই ইনপুট বা আউটপুট ডিভাইসে পাঠানো হয়। stderr স্ট্যান্ডার্ড এরর স্ট্রীমটি সাধারণত অবাফারিং করে থাকে, কারণ ত্রুটির তথ্য সাথে সাথেই দেখানো গুরুত্বপূর্ণ।

উদাহরণ: নিচের উদাহরণে fprintf() ব্যবহার করে ত্রুটি মেসেজ প্রদর্শন করা হয়েছে, যা অবাফারড অপারেশন।

#include <stdio.h>

int main() {
    fprintf(stderr, "An error occurred!\n");  // সাথে সাথেই আউটপুট প্রদর্শিত হবে
    return 0;
}

বাফারিং নিয়ন্ত্রণ করা – setbuf() এবং setvbuf()

setbuf() এবং setvbuf() ফাংশনগুলো ব্যবহার করে আমরা ফাইল স্ট্রীমের বাফারিং মোড নির্ধারণ করতে পারি।

১. setbuf(FILE *stream, char *buffer);

  • stream: ফাইল পয়েন্টার।
  • buffer: যদি NULL দেওয়া হয়, তবে ফাইল স্ট্রীম অবাফারড হয়ে যাবে।

২. setvbuf(FILE *stream, char *buffer, int mode, size_t size);

  • stream: ফাইল পয়েন্টার।
  • buffer: বাফার (যদি NULL দেওয়া হয় তবে অবাফারড)।
  • mode: তিন ধরনের মোড হতে পারে: _IONBF (No Buffering), _IOLBF (Line Buffering), _IOFBF (Full Buffering)।
  • size: বাফারের আকার।

উদাহরণ: setvbuf() ফাংশন ব্যবহার করে লাইনে বাফারিং নির্ধারণ।

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "w");
    if (file == NULL) {
        printf("Error opening file.\n");
        return 1;
    }

    setvbuf(file, NULL, _IOLBF, 0);  // লাইনে বাফারিং নির্ধারণ করা

    fprintf(file, "Hello, World!\n");
    fclose(file);
    return 0;
}

সারসংক্ষেপ

বাফারিং প্রকারবর্ণনাউদাহরণ
লাইনে বাফারিংডেটা newline এলে পাঠানো হয়printf() এর মাধ্যমে
পূর্ণ বাফারিংবাফার পূর্ণ হলে ডেটা পাঠানো হয়ফাইল লেখার সময়
অবাফারিংডেটা সাথে সাথেই পাঠানো হয়stderr ত্রুটি মেসেজ

স্ট্যান্ডার্ড ইনপুট/আউটপুট বাফারিং সি প্রোগ্রামিংয়ে ইনপুট/আউটপুট অপারেশন দ্রুত করার জন্য ব্যবহৃত হয়। এর মাধ্যমে কার্যকারিতা বাড়ানো এবং CPU এবং I/O ডিভাইসের মধ্যে সঠিক সিঙ্ক্রোনাইজেশন নিশ্চিত করা যায়।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion